home *** CD-ROM | disk | FTP | other *** search
/ HAKERIS 11 / HAKERIS 11.ISO / soft / development / Macromedia RoboHelp X5 / RoboHelpOffice.exe / Data1.cab / _5064BE6571EA496BA290E8CA43CA4711 < prev    next >
Encoding:
Extensible Markup Language  |  2003-11-05  |  36.7 KB  |  1,195 lines

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet version="1.0"
  3.                 xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  4.                 xmlns:roboml="urn:schemas-ehelp-com:xslt"
  5.                 xmlns:RHHandlerDb="http://ehelp.com/RHHandlerDb"
  6.                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  7.                 xmlns:html="http://www.w3.org/1999/xhtml"
  8.                 exclude-result-prefixes="roboml msxsl RHHandlerDb xsl html">
  9.  
  10. <xsl:output method="xml" cdata-section-elements="programlisting" encoding="utf-8" indent="no"/>
  11.  
  12. <!-- parameters -->
  13. <xsl:param name="roboxml_destination_dir_name"></xsl:param>
  14. <xsl:param name="roboxml_project_file_name"></xsl:param>
  15.  
  16. <xsl:param name="export.comment" select="1" />
  17. <xsl:param name="export.script" select="1" />
  18. <xsl:param name="export.style" select="1" />
  19.  
  20. <xsl:variable name="rhc.const.dummyflagstring" select="'RHC.DUMMY'" />
  21.  
  22. <!-- includings -->
  23. <xsl:include href="./common/rhc_l10n.xsl"/>        <!-- language -->
  24. <xsl:include href="PRJ2DOCBOOKUTILS.xsl"/>        <!-- utility template and script functions -->
  25.  
  26. <!-- ================= Script defines here =========================== -->
  27. <msxsl:script language="JScript" implements-prefix="RHHandlerDb">
  28. function nodeToStr(nodeList)
  29. {
  30.     return nodeList.nextNode().xml;
  31. }
  32. </msxsl:script>
  33.  
  34. <!-- ================= Template defines here =========================== -->
  35. <xsl:template match="html:html">
  36.     <section>
  37.         <xsl:if test="html:head/html:link[@href!='']">
  38.             <xsl:attribute name="condition">
  39.                 <xsl:value-of select="html:head/html:link/@href"/>
  40.             </xsl:attribute>
  41.         </xsl:if>
  42.         <xsl:call-template name="generate_element_role">
  43.             <xsl:with-param name="node" select="./html:body" />
  44.         </xsl:call-template>
  45.         <sectioninfo>
  46.             <xsl:apply-templates select="html:head"/>
  47.         </sectioninfo>
  48.         <xsl:apply-templates select="html:head/html:title" />
  49.         
  50.         <xsl:apply-templates select="html:head/html:script" mode="head_script" />
  51.  
  52.         <xsl:call-template name="generateSection">
  53.             <xsl:with-param name="node" select="html:body/node()" />
  54.         </xsl:call-template>
  55.     </section>
  56. </xsl:template>
  57.  
  58. <xsl:template name="generateSection">
  59.     <xsl:param name="node" select="." />
  60.  
  61.     <xsl:variable name="sectionContent">
  62.         <xsl:variable name="SectionDivTagPositions">
  63.             <xsl:for-each select="$node">
  64.                 <xsl:if test="((local-name(.)='div') or (local-name(.)='noscript'))and
  65.                             ((./following-sibling::*[1][local-name()!='div' and local-name()!='noscript']) or 
  66.                              (normalize-space(./following-sibling::node()[1]/self::text()) != ''))">
  67.                     <xsl:value-of select="concat(position(), '-')" />
  68.                 </xsl:if>
  69.             </xsl:for-each>
  70.         </xsl:variable>
  71.         <xsl:variable name="PosOfFirstSectionDivTag">
  72.             <xsl:value-of select="substring-before($SectionDivTagPositions, '-')" />
  73.         </xsl:variable>
  74.  
  75.         <xsl:choose>
  76.             <xsl:when test="$PosOfFirstSectionDivTag != ''">
  77.     
  78.                 <xsl:variable name="DivPositions">
  79.                     <xsl:for-each select="$node">
  80.                         <xsl:if test="(position() > $PosOfFirstSectionDivTag) and ((local-name()='div') or (local-name()='noscript'))">
  81.                             <xsl:value-of select="concat(position(), '-')" />
  82.                         </xsl:if>
  83.                     </xsl:for-each>
  84.                     <xsl:value-of select="concat(count($node)+1, '-')" />
  85.                 </xsl:variable>
  86.                 <xsl:variable name="PosOfFirstDivAfterSectionDivTag">
  87.                     <xsl:value-of select="substring-before($DivPositions, '-')" />
  88.                 </xsl:variable>
  89.                 
  90.                 <xsl:apply-templates select="$node[position() <= $PosOfFirstSectionDivTag]" />
  91.     
  92.                 <xsl:if test="$PosOfFirstDivAfterSectionDivTag - $PosOfFirstSectionDivTag > 1">
  93.                     <section>
  94.                         <xsl:call-template name="generate_dummy_role_attribute"/>
  95.                         <xsl:call-template name="generate_dummy_element">
  96.                             <xsl:with-param name="elementname" select="'title'" />
  97.                         </xsl:call-template>
  98.     
  99.                         <xsl:variable name="intermediateSection">
  100. <!-- the following should not be necessary but still keep now for safe... to be checked carefully later
  101.                             <xsl:if test="count($node[(position() > $PosOfFirstSectionDivTag)
  102.                                                  and (position() < $PosOfFirstDivAfterSectionDivTag)][node()]) = 0 ">
  103.                                 <xsl:if test="normalize-space($node[(position() > $PosOfFirstSectionDivTag)
  104.                                                      and (position() < $PosOfFirstDivAfterSectionDivTag)][text()])=''">
  105.                                             <xsl:call-template name="generate_dummy_element">
  106.                                                 <xsl:with-param name="elementname" select="'para'" />
  107.                                             </xsl:call-template>
  108.                                 </xsl:if>
  109.                             </xsl:if>
  110. check carefully ends -->
  111.                             <xsl:apply-templates select="$node[(position() > $PosOfFirstSectionDivTag)
  112.                                      and (position() < $PosOfFirstDivAfterSectionDivTag)]" />        
  113.                         </xsl:variable>
  114.                         <xsl:choose>
  115.                             <xsl:when test="msxsl:node-set($intermediateSection)/*">
  116.                                 <xsl:call-template name="integrate_continuous_dummysimpara_to_one">
  117.                                     <xsl:with-param name="node" select="msxsl:node-set($intermediateSection)" />
  118.                                 </xsl:call-template>
  119.                             </xsl:when>
  120.                             <xsl:otherwise>
  121.                                 <xsl:call-template name="generate_dummy_element">
  122.                                     <xsl:with-param name="elementname" select="'para'" />
  123.                                 </xsl:call-template>                                
  124.                             </xsl:otherwise>
  125.                         </xsl:choose>
  126.                     </section>
  127.                 </xsl:if>
  128.     
  129.                 <xsl:if test="$PosOfFirstDivAfterSectionDivTag <= count($node)">
  130.                     <xsl:call-template name="generateSection">
  131.                         <xsl:with-param name="node" select="$node[position() >= $PosOfFirstDivAfterSectionDivTag]" />
  132.                     </xsl:call-template>
  133.                 </xsl:if>
  134.             </xsl:when>
  135.     
  136.             <xsl:otherwise>
  137.                 <xsl:apply-templates select="$node" />
  138.                 <xsl:if test="(count($node[node()]) = 0) and (normalize-space($node[text()])='')">
  139.                     <xsl:call-template name="generate_dummy_element">
  140.                         <xsl:with-param name="elementname" select="'para'" />
  141.                     </xsl:call-template>
  142.                 </xsl:if>
  143.             </xsl:otherwise>
  144.         </xsl:choose>
  145.  
  146.     </xsl:variable>
  147.     
  148.     <xsl:if test="$sectionContent">
  149.         <xsl:call-template name="integrate_continuous_dummysimpara_to_one">
  150.             <xsl:with-param name="node" select="msxsl:node-set($sectionContent)" />
  151.         </xsl:call-template>
  152.     </xsl:if>
  153.  
  154. </xsl:template>
  155.  
  156. <xsl:template name="integrate_continuous_dummysimpara_to_one">
  157.     <xsl:param name="node"/>
  158.     <xsl:param name="posStart" select="1" />
  159.  
  160.     <xsl:variable name="nodeCount">
  161.         <xsl:value-of select="count($node/node())" />
  162.     </xsl:variable>
  163.  
  164.     <!-- find the first non-dummy simpara ELEMENT from the start position -->    
  165.     <xsl:variable name="posOfFirst_Not_DummySimpara">
  166.         <xsl:variable name="PositionsOfAll_Not_DummySimpara">
  167.             <xsl:for-each select="$node/node()[position() >= $posStart]">
  168.                 <xsl:if test="(local-name(.)!='') and
  169.                                 ((local-name() != 'simpara' or ./@role != $rhc.const.dummyflagstring))">
  170.                     <xsl:value-of select="concat(position() + $posStart -1, '-')" />
  171.                 </xsl:if>
  172.             </xsl:for-each>
  173.             <xsl:value-of select="concat($nodeCount+1, '-')" />
  174.         </xsl:variable>
  175.         <xsl:value-of select="substring-before($PositionsOfAll_Not_DummySimpara, '-')" />
  176.     </xsl:variable>
  177.  
  178.     <!-- merge all continuous dummy simpara nodes together into one -->
  179.     <xsl:if test="$posOfFirst_Not_DummySimpara > $posStart">
  180.         <simpara>
  181.             <xsl:call-template name="generate_dummy_role_attribute"/>
  182.             <xsl:for-each select="$node/node()[(position() >= $posStart) and (position() < $posOfFirst_Not_DummySimpara)]">
  183.                 <xsl:choose>
  184.                     <xsl:when test="local-name(.) = ''">        <!-- comment or Text() -->
  185.                         <xsl:copy />
  186.                     </xsl:when>
  187.                     <xsl:otherwise>
  188.                         <xsl:copy-of select="./child::node()"/>
  189.                     </xsl:otherwise>
  190.                 </xsl:choose>
  191.             </xsl:for-each>
  192.         </simpara>
  193.     </xsl:if>
  194.  
  195.     <xsl:if test="$posOfFirst_Not_DummySimpara <= $nodeCount">
  196.     
  197.         <!-- find next dummy simpara start position -->
  198.         <xsl:variable name="posOfNext_DummySimpara">
  199.             <xsl:variable name="positionsOfAll_DummySimpara">
  200.                 <xsl:for-each select="$node/node()[position() > $posOfFirst_Not_DummySimpara]">
  201.                     <xsl:if test="(local-name(.)='simpara') and (./@role=$rhc.const.dummyflagstring)">
  202.                         <xsl:value-of select="concat(position() + $posOfFirst_Not_DummySimpara, '-')" />
  203.                     </xsl:if>
  204.                 </xsl:for-each>
  205.                 <xsl:value-of select="concat($nodeCount+1, '-')" />
  206.             </xsl:variable>
  207.             <xsl:value-of select="substring-before($positionsOfAll_DummySimpara, '-')" />
  208.         </xsl:variable>
  209.  
  210.         <!-- copy all non-dummy simpara nodes directly -->
  211.         <xsl:for-each select="$node/node()[position() >= $posOfFirst_Not_DummySimpara and position() < $posOfNext_DummySimpara]">
  212.             <xsl:copy-of select="."/>
  213.         </xsl:for-each>
  214.  
  215.         <!-- dealing with next dummy simpara fragment -->
  216.         <xsl:if test="$posOfNext_DummySimpara <= $nodeCount">
  217.             <xsl:call-template name="integrate_continuous_dummysimpara_to_one">
  218.                 <xsl:with-param name="node" select="$node" />
  219.                 <xsl:with-param name="posStart" select="$posOfNext_DummySimpara" />
  220.             </xsl:call-template>            
  221.         </xsl:if>
  222.     </xsl:if>
  223. </xsl:template>
  224.  
  225. <xsl:template match="html:head/html:meta">
  226.     <xsl:if test="@name='description'">
  227.         <abstract>
  228.         <para>
  229.             <xsl:value-of select="@content" />
  230.         </para>
  231.         </abstract>
  232.     </xsl:if>
  233.     <xsl:if test="@name='RobomlCodecName' and @content !=''">
  234.         <publisher>
  235.             <xsl:attribute name="role">
  236.                 <xsl:value-of select="concat('RobomlCodecName: ', @content)" />
  237.             </xsl:attribute>
  238.             <publishername>RoboHelp by eHelp Corporation - www.ehelp.com</publishername>
  239.         </publisher>
  240.     </xsl:if>    
  241.  
  242. </xsl:template>
  243.     
  244. <xsl:template match="html:title[normalize-space(text())!= '']">
  245.     <title>
  246.         <xsl:value-of select="text()"/>
  247.     </title>
  248. </xsl:template>
  249.  
  250. <xsl:template match="html:div|html:noscript">
  251.     <section>
  252.         <xsl:apply-templates select="@*"/>
  253.         <xsl:call-template name="generate_element_role">
  254.             <xsl:with-param name="node" select="." />
  255.         </xsl:call-template>
  256.         <xsl:call-template name="generate_dummy_element">
  257.             <xsl:with-param name="elementname" select="'title'" />
  258.         </xsl:call-template>
  259.         <xsl:call-template name="generateSection">
  260.             <xsl:with-param name="node" select="./node()" />
  261.         </xsl:call-template>
  262.     </section>
  263. </xsl:template>
  264.  
  265. <xsl:template match="html:h1|html:h2|html:h3|html:h4|html:h5|html:h6">
  266.     <para>
  267.         <xsl:apply-templates select="@*"/>
  268.         <xsl:call-template name="generate_element_role">
  269.             <xsl:with-param name="node" select="." />
  270.         </xsl:call-template>
  271.         <xsl:apply-templates />
  272.     </para>
  273. </xsl:template>
  274.  
  275. <xsl:template match="html:p">
  276.     <para>
  277.         <xsl:apply-templates select="@*" />
  278.         <xsl:call-template name="generate_element_role">
  279.             <xsl:with-param name="node" select="." />
  280.         </xsl:call-template>
  281.         <xsl:apply-templates />
  282.     </para>
  283. </xsl:template>
  284.  
  285. <xsl:template match="html:a" mode="rh.export.topic">
  286.     <xsl:choose>
  287.         <!-- URL link -->
  288.         <xsl:when test="normalize-space(@name)=''">    
  289.             <xsl:variable name="nodeContent">
  290.                 <ulink>
  291.                     <xsl:apply-templates select="@*" />
  292.                     <xsl:attribute name="url">
  293.                         <xsl:value-of select="normalize-space(@href)"/>
  294.                     </xsl:attribute>
  295.                     <xsl:apply-templates/>
  296.                 </ulink>
  297.             </xsl:variable>
  298.                 
  299.             <xsl:call-template name="simpara_pack_node">
  300.                 <xsl:with-param name="nodeContent" select="$nodeContent" />
  301.             </xsl:call-template>
  302.         </xsl:when>
  303.  
  304.         <!-- An Anchor -->
  305.         <xsl:otherwise>
  306.             <anchor>
  307.                 <xsl:apply-templates select="@*" />
  308.                 <xsl:if test="@name">
  309.                     <xsl:attribute name="id">
  310.                         <xsl:value-of select="normalize-space(@name)"/>
  311.                     </xsl:attribute>
  312.                 </xsl:if>
  313.             </anchor>
  314.         </xsl:otherwise>
  315.     </xsl:choose>
  316. </xsl:template>
  317.  
  318. <xsl:template match="html:a">
  319.     <xsl:choose>
  320.         <!-- URL link -->
  321.         <xsl:when test="normalize-space(@name)=''">
  322.             <xsl:variable name="nodeContent">
  323.                 <xsl:variable name="transformedURL">
  324.                     <xsl:call-template name="transformed_url">
  325.                         <xsl:with-param name="url" select="normalize-space(@href)" />
  326.                         <xsl:with-param name="prjfile" select="string($roboxml_project_file_name)" />
  327.                     </xsl:call-template>
  328.                 </xsl:variable>
  329.                 <ulink>
  330.                     <xsl:apply-templates select="@*" />
  331.                     <xsl:attribute name="url">
  332.                         <xsl:value-of select="normalize-space($transformedURL)"/>
  333.                     </xsl:attribute>
  334.                     <xsl:apply-templates/>
  335.                 </ulink>
  336.             </xsl:variable>
  337.             
  338.             <xsl:call-template name="simpara_pack_node">
  339.                 <xsl:with-param name="nodeContent" select="$nodeContent" />
  340.             </xsl:call-template>
  341.         </xsl:when>
  342.  
  343.         <!-- An Anchor -->
  344.         <xsl:otherwise>
  345.             <anchor>
  346.                 <xsl:apply-templates select="@*" />
  347.                 <xsl:if test="@name">
  348.                     <xsl:attribute name="id">
  349.                         <xsl:value-of select="normalize-space(@name)"/>
  350.                     </xsl:attribute>
  351.                 </xsl:if>
  352.             </anchor>
  353.         </xsl:otherwise>
  354.     </xsl:choose>
  355. </xsl:template>
  356.  
  357. <xsl:template match="html:img">
  358.     <xsl:choose>
  359.         <xsl:when test="@usemap">
  360.             <mediaobjectco>
  361.                 <imageobjectco>
  362.  
  363.                     <xsl:call-template name="areaspec">
  364.                         <xsl:with-param name="mapID" select="substring-after(@usemap,'#')"/>
  365.                     </xsl:call-template>
  366.  
  367.                     <imageobject>
  368.                         <xsl:call-template name="image"/>
  369.                     </imageobject>
  370.                     
  371.                     <xsl:call-template name="calloutlist">
  372.                         <xsl:with-param name="mapID" select="substring-after(@usemap,'#')"/>
  373.                     </xsl:call-template>
  374.                 
  375.                 </imageobjectco>    
  376.             </mediaobjectco>
  377.         </xsl:when>
  378.  
  379.         <xsl:when test="boolean(parent::html:p) and normalize-space(parent::html:p/text())!=''">
  380.             <inlinemediaobject>
  381.                 <imageobject>
  382.                     <xsl:call-template name="image"/>
  383.                 </imageobject>
  384.             </inlinemediaobject>
  385.         </xsl:when>
  386.  
  387.         <xsl:when test="parent::html:body or parent::html:div or parent::html:noscript">
  388.             <mediaobject>
  389.                 <imageobject>
  390.                     <xsl:call-template name="image"/>
  391.                 </imageobject>
  392.             </mediaobject>
  393.         </xsl:when>
  394.  
  395.         <xsl:otherwise>
  396.             <inlinemediaobject>
  397.                 <imageobject>
  398.                     <xsl:call-template name="image"/>
  399.                 </imageobject>
  400.             </inlinemediaobject>
  401.         </xsl:otherwise>
  402.     </xsl:choose>
  403.  
  404. </xsl:template>
  405.  
  406. <xsl:template name="areaspec">
  407.     <xsl:param name="mapID" select="0"/>
  408.  
  409.     <xsl:element name="areaspec">
  410.         <xsl:attribute name="id">
  411.             <xsl:value-of select="$mapID"/>
  412.         </xsl:attribute>
  413.  
  414.         <xsl:for-each select="//html:map[@id = $mapID]/html:area">
  415.  
  416.             <xsl:variable name="areaid">
  417.                 <xsl:call-template name="generateAreaId">
  418.                     <xsl:with-param name="mapID" select="$mapID" />
  419.                 </xsl:call-template>
  420.             </xsl:variable>
  421.     
  422.             <xsl:element name="area">
  423.                 <xsl:attribute name="units">other</xsl:attribute>
  424.                 <xsl:attribute name="otherunits">
  425.                     <xsl:value-of select="@shape"/>
  426.                 </xsl:attribute>
  427.                 <xsl:attribute name="id">    <!-- here, id is required by Docbook -->
  428.                     <xsl:value-of select="$areaid" />
  429.                 </xsl:attribute>
  430.                 <xsl:attribute name="linkends">
  431.                     <xsl:value-of select="concat($areaid, '_url')"/>
  432.                 </xsl:attribute>
  433.                 <xsl:if test="@alt">
  434.                     <xsl:attribute name="label">
  435.                         <xsl:value-of select="@alt"/>
  436.                     </xsl:attribute>
  437.                 </xsl:if>
  438.                 <xsl:attribute name="coords">
  439.                     <xsl:value-of select="@coords"/>
  440.                 </xsl:attribute>
  441.             </xsl:element>
  442.  
  443.         </xsl:for-each>
  444.     </xsl:element>
  445. </xsl:template>
  446.  
  447. <xsl:template name="generateAreaId">
  448.     <xsl:param name="mapID" select="0"/>
  449.     <xsl:param name="areanode" select="." />
  450.     <xsl:choose>
  451.         <xsl:when test="@id">
  452.             <xsl:value-of select="@id" />
  453.         </xsl:when>
  454.         <xsl:otherwise>
  455.             <xsl:value-of select="concat($mapID, '_area_', position())" />
  456.         </xsl:otherwise>
  457.     </xsl:choose>
  458.  
  459. </xsl:template>
  460.  
  461. <xsl:template name="calloutlist">
  462.     <xsl:param name="mapID" select="0"/>
  463.  
  464.     <calloutlist>
  465.         <xsl:call-template name="generate_dummy_role_attribute"/>
  466.         <xsl:for-each select="//html:map[@id = $mapID]/html:area">
  467.  
  468.             <xsl:variable name="areaid">
  469.                 <xsl:call-template name="generateAreaId">
  470.                     <xsl:with-param name="mapID" select="$mapID" />
  471.                 </xsl:call-template>
  472.             </xsl:variable>
  473.  
  474.             <xsl:variable name="transformedURL">
  475.                 <xsl:call-template name="transformed_url">
  476.                     <xsl:with-param name="url" select="normalize-space(@href)" />
  477.                     <xsl:with-param name="prjfile" select="string($roboxml_project_file_name)" />
  478.                 </xsl:call-template>
  479.             </xsl:variable>
  480.  
  481.             <callout>
  482.                 <xsl:attribute name="arearefs">
  483.                     <xsl:value-of select="$areaid" />
  484.                 </xsl:attribute>
  485.                 <simpara>
  486.                     <xsl:call-template name="generate_dummy_role_attribute"/>
  487.                     <ulink>
  488.                         <xsl:attribute name="id">
  489.                             <xsl:value-of select="concat($areaid, '_url')"/>
  490.                         </xsl:attribute>
  491.                         <xsl:attribute name="url">
  492.                             <xsl:value-of select="$transformedURL"/>
  493.                         </xsl:attribute>
  494.                     </ulink>
  495.                 </simpara>
  496.             </callout>
  497.  
  498.         </xsl:for-each>
  499.     </calloutlist>
  500. </xsl:template>
  501.  
  502. <xsl:template name="image">
  503.     <imagedata>
  504.         <xsl:apply-templates select="@*" />
  505.         <xsl:attribute name="fileref">
  506.             <xsl:value-of select="@src"/>
  507.         </xsl:attribute>
  508.         <xsl:if test="@height != ''">
  509.             <xsl:attribute name="depth">
  510.                 <xsl:value-of select="@height"/>
  511.             </xsl:attribute>
  512.         </xsl:if>
  513.         <xsl:if test="@width != ''">
  514.             <xsl:attribute name="width">
  515.                 <xsl:value-of select="@width"/>
  516.             </xsl:attribute>
  517.         </xsl:if>
  518.         <!-- ABSBOTTOM | ABSMIDDLE | BASELINE | BOTTOM | LEFT | MIDDLE | RIGHT | TEXTTOP | TOP -->
  519.         <xsl:if test="@align != ''">
  520.             <xsl:choose>
  521.                 <xsl:when test="@align = 'bottom' or @align = 'top'">
  522.                     <xsl:attribute name="valign"><xsl:value-of select="@align" /></xsl:attribute>
  523.                 </xsl:when>
  524.                 <xsl:when test="@align = 'middle'">
  525.                     <xsl:attribute name="valign">middle</xsl:attribute>
  526.                     <xsl:attribute name="align">center</xsl:attribute>
  527.                 </xsl:when>
  528.                 <xsl:when test="@align = 'left' or @align = 'right'">
  529.                     <xsl:attribute name="align"><xsl:value-of select="@align" /></xsl:attribute>
  530.                 </xsl:when>
  531.                 <xsl:otherwise>
  532.                     <xsl:attribute name="srccredit">
  533.                         <xsl:value-of select="concat('RHC.VALUE.ALIGN\', @align)" />
  534.                     </xsl:attribute>                
  535.                 </xsl:otherwise>
  536.             </xsl:choose>
  537.         </xsl:if>
  538.     </imagedata>
  539. </xsl:template>
  540.  
  541. <xsl:template match="html:b|html:u|html:i|html:s|html:strike|html:q|html:cite|html:em|html:strong
  542.                     |html:big|html:small|html:sub|html:sup
  543.                     |html:tt|html:kbd|html:samp|html:var|html:code
  544.                     |html:abbr|html:acronym|html:font|html:basefont|html:span">
  545.  
  546.     <xsl:choose>
  547.  
  548.         <!-- there's any embedded tag inside these text elements -->
  549.         <xsl:when test="count(./node())!=1 or count(./text())!=1">
  550.             <xsl:call-template name="process_text_elements" />
  551.         </xsl:when>
  552.  
  553.         <!-- there's no any other element inside -->
  554.         <xsl:otherwise>
  555.             <xsl:variable name="nodeContent">
  556.                 <xsl:choose>
  557.                     <xsl:when test="local-name(.) = 'b' or local-name='strong'">
  558.                         <emphasis role="bold">
  559.                             <xsl:apply-templates select="@*" />
  560.                             <xsl:apply-templates/>
  561.                         </emphasis>
  562.                     </xsl:when>
  563.                     <xsl:when test="local-name='cite'">
  564.                         <citation>
  565.                             <xsl:apply-templates select="@*" />
  566.                             <xsl:call-template name="generate_element_role">
  567.                                 <xsl:with-param name="node" select="." />
  568.                             </xsl:call-template>                        
  569.                             <xsl:apply-templates />                
  570.                         </citation>
  571.                     </xsl:when>
  572.                     <xsl:when test="local-name='q'">
  573.                         <quote>
  574.                             <xsl:apply-templates select="@*" />
  575.                             <xsl:call-template name="generate_element_role">
  576.                                 <xsl:with-param name="node" select="." />
  577.                             </xsl:call-template>                        
  578.                             <xsl:apply-templates />                
  579.                         </quote>
  580.                     </xsl:when>
  581.                     <xsl:when test="local-name(.)='i' or local-name(.)='u' or local-name(.)='em'
  582.                                     or local-name(.)='s' or local-name(.)='strike'">
  583.                         <emphasis>
  584.                             <xsl:apply-templates select="@*" />
  585.                             <xsl:call-template name="generate_element_role">
  586.                                 <xsl:with-param name="node" select="." />
  587.                             </xsl:call-template>                        
  588.                             <xsl:apply-templates />
  589.                         </emphasis>
  590.                     </xsl:when>
  591.                     <xsl:when test="local-name(.)='sup'">
  592.                         <superscript>
  593.                             <xsl:apply-templates select="@*" />
  594.                             <xsl:apply-templates />
  595.                         </superscript>
  596.                     </xsl:when>                
  597.                     <xsl:when test="local-name(.)='sub'">
  598.                         <subscript>
  599.                             <xsl:apply-templates select="@*" />
  600.                             <xsl:apply-templates />
  601.                         </subscript>
  602.                     </xsl:when>
  603.                     <xsl:when test="local-name(.)='tt' or local-name='kbd' or local-name='samp' or local-name='var' or local-name='code'">
  604.                         <literal>
  605.                             <xsl:apply-templates select="@*" />
  606.                             <xsl:call-template name="generate_element_role">
  607.                                 <xsl:with-param name="node" select="." />
  608.                             </xsl:call-template>                        
  609.                             <xsl:apply-templates />
  610.                         </literal>
  611.                     </xsl:when>                
  612.                     <xsl:otherwise>
  613.                         <phrase>
  614.                             <xsl:apply-templates select="@*" />
  615.                             <xsl:call-template name="generate_element_role">
  616.                                 <xsl:with-param name="node" select="." />
  617.                             </xsl:call-template>                        
  618.                             <xsl:apply-templates />
  619.                         </phrase>
  620.                     </xsl:otherwise>
  621.                 </xsl:choose>
  622.             </xsl:variable>
  623.             
  624.             <xsl:call-template name="simpara_pack_node">
  625.                 <xsl:with-param name="nodeContent" select="$nodeContent" />
  626.             </xsl:call-template>
  627.  
  628.         </xsl:otherwise>
  629.  
  630.     </xsl:choose>
  631.  
  632. </xsl:template>
  633.  
  634. <xsl:template match="html:ins|html:del">
  635.     <xsl:variable name="nodeContent">
  636.         <phrase>
  637.             <xsl:attribute name="revisionflag">
  638.                 <xsl:choose>
  639.                     <xsl:when test="local-name(.)='ins'">
  640.                         <xsl:value-of select="'added'" />
  641.                     </xsl:when>
  642.                     <xsl:otherwise>
  643.                         <xsl:value-of select="'deleted'" />
  644.                     </xsl:otherwise>
  645.                 </xsl:choose>
  646.             </xsl:attribute>
  647.             
  648.             <xsl:apply-templates select="@*" />
  649.             
  650.             <xsl:call-template name="generate_element_role">
  651.                 <xsl:with-param name="node" select="." />
  652.             </xsl:call-template>
  653.             
  654.             <xsl:apply-templates />
  655.  
  656.         </phrase>
  657.     </xsl:variable>
  658.         
  659.     <xsl:call-template name="simpara_pack_node">
  660.         <xsl:with-param name="nodeContent" select="$nodeContent" />
  661.     </xsl:call-template>
  662. </xsl:template>    
  663.  
  664. <xsl:template name="process_text_elements">
  665.     <xsl:param name="node" select="." />
  666.     
  667.     <xsl:variable name="nodeContent">
  668.         <phrase>
  669.             <xsl:apply-templates select="@*" />
  670.             <xsl:call-template name="generate_element_role">
  671.                 <xsl:with-param name="node" select="$node" />
  672.             </xsl:call-template>
  673.             <xsl:apply-templates />
  674.         </phrase>
  675.     </xsl:variable>
  676.         
  677.     <xsl:call-template name="simpara_pack_node">
  678.         <xsl:with-param name="nodeContent" select="$nodeContent" />
  679.     </xsl:call-template>
  680. </xsl:template>
  681.  
  682. <xsl:template match="html:ul">
  683.     <itemizedlist>
  684.         <xsl:apply-templates select="@*" />
  685.         <xsl:apply-templates/>
  686.     </itemizedlist>
  687. </xsl:template>
  688.  
  689. <xsl:template match="html:ol">
  690.     <orderedlist>
  691.         <xsl:apply-templates select="@*" />
  692.         <xsl:if test="@start">
  693.             <xsl:attribute name="condition">
  694.                 <xsl:value-of select="concat('RHC.VALUE.START\', @start)"/>
  695.             </xsl:attribute>
  696.         </xsl:if>
  697.         <xsl:attribute name="numeration">
  698.             <xsl:choose>
  699.                 <xsl:when test="@type='A'">upperalpha</xsl:when>
  700.                 <xsl:when test="@type='a'">loweralpha</xsl:when>
  701.                 <xsl:when test="@type='I'">upperroman</xsl:when>
  702.                 <xsl:when test="@type='i'">lowerroman</xsl:when>
  703.                 <xsl:otherwise>arabic</xsl:otherwise>
  704.             </xsl:choose>
  705.         </xsl:attribute>
  706.         <xsl:apply-templates/>
  707.     </orderedlist>
  708. </xsl:template>
  709.  
  710. <xsl:template match="html:dl">
  711.     <variablelist>
  712.         <xsl:apply-templates select="@*" />
  713.         <xsl:for-each select="html:dt">
  714.             <varlistentry>
  715.                 <term>
  716.                     <xsl:apply-templates/>
  717.                 </term>
  718.                 <listitem>
  719.                     <xsl:choose>
  720.                         <xsl:when test="local-name(following-sibling::*[1]) = 'dd'">                            
  721.                             <xsl:apply-templates select="following-sibling::*[1]"/>
  722.                         </xsl:when>
  723.                         <xsl:otherwise>
  724.                             <xsl:call-template name="generate_dummy_element">
  725.                                 <xsl:with-param name="elementname" select="'para'" />
  726.                             </xsl:call-template>
  727.                         </xsl:otherwise>
  728.                     </xsl:choose>
  729.                 </listitem>
  730.             </varlistentry>
  731.         </xsl:for-each>
  732.     </variablelist>
  733. </xsl:template>
  734.  
  735. <xsl:template match="html:dd">
  736.     <xsl:apply-templates select="@*" />
  737.     <xsl:choose>
  738.         <xsl:when test="boolean(html:p|html:h1|html:h2|html:h3|html:h4|html:h5|html:h6)">
  739.             <xsl:apply-templates/>
  740.         </xsl:when>
  741.         <xsl:otherwise>
  742.             <para>
  743.                 <xsl:call-template name="generate_dummy_role_attribute" />
  744.                 <xsl:apply-templates select="@*" />
  745.                 <xsl:apply-templates/>
  746.             </para>
  747.         </xsl:otherwise>
  748.     </xsl:choose>
  749. </xsl:template>
  750.  
  751. <xsl:template match="html:li/text()">
  752.     <xsl:if test="normalize-space(.) != ''">
  753.         <simpara>
  754.             <xsl:call-template name="generate_dummy_role_attribute" />
  755.             <xsl:value-of select="." />
  756.         </simpara>
  757.     </xsl:if>
  758. </xsl:template>
  759.  
  760. <xsl:template match="html:li">
  761.     <listitem>
  762.         <xsl:apply-templates select="@*" />
  763.         <xsl:choose>
  764.             <xsl:when test="count(text())>0">
  765.                 <xsl:apply-templates />
  766.             </xsl:when>
  767. <!--
  768.             <xsl:when test="not(html:p|html:h1|html:h2|html:h3|html:h4|html:h5|html:h6)">
  769.                 <para>
  770.                     <xsl:call-template name="generate_dummy_role_attribute" />
  771.                     <xsl:apply-templates/>
  772.                 </para>
  773.             </xsl:when>
  774. -->                
  775.             <xsl:when test="not(*)">
  776.                 <xsl:call-template name="generate_dummy_element">
  777.                     <xsl:with-param name="elementname" select="'para'" />
  778.                 </xsl:call-template>
  779.             </xsl:when>
  780.             <xsl:otherwise>
  781.                 <xsl:apply-templates />
  782.             </xsl:otherwise>
  783.         </xsl:choose>
  784.     </listitem>
  785. </xsl:template>
  786.  
  787. <xsl:template match="html:table">
  788.     <xsl:variable name="wlColumnCount">
  789.         <xsl:call-template name="countColumn">
  790.             <xsl:with-param name="table" select="."/>
  791.         </xsl:call-template>
  792.     </xsl:variable>
  793.     <xsl:variable name="nodeContent">
  794.         <informaltable frame="none">
  795.             <tgroup colsep="0" rowsep="0">
  796.                 <xsl:apply-templates select="@*" />
  797.                 <xsl:attribute name="cols">
  798.                     <xsl:value-of select="$wlColumnCount"/>
  799.                 </xsl:attribute>
  800.                 <xsl:call-template name="generateColspec">
  801.                     <xsl:with-param name="count" select="$wlColumnCount"/>
  802.                     <xsl:with-param name="colNodes" select="./html:col|./html:colgroup/html:col" />
  803.                 </xsl:call-template>
  804.  
  805.                 <xsl:choose>
  806.                     <xsl:when test="html:thead/html:tr/html:th">
  807.                         <thead>
  808.                             <xsl:apply-templates select="html:thead/html:tr[child::html:th]"/>
  809.                         </thead>
  810.                         <tbody>
  811.                             <xsl:apply-templates select="html:tbody/html:tr[not(child::html:th)]|html:tr[not(child::html:th)]"/>
  812.                         </tbody>
  813.                     </xsl:when>
  814.                     <xsl:when test="html:tr/html:th">
  815.                         <thead>
  816.                             <xsl:apply-templates select="html:tr[child::html:th]"/>
  817.                         </thead>
  818.                         <tbody>
  819.                             <xsl:apply-templates select="html:tbody/html:tr[not(child::html:th)]|html:tr[not(child::html:th)]"/>
  820.                         </tbody>
  821.                     </xsl:when>
  822.                     <xsl:when test="html:thead/html:th">
  823.                         <thead>
  824.                             <row>
  825.                             <xsl:apply-templates select="html:thead/html:th"/>
  826.                             </row>
  827.                         </thead>
  828.                         <tbody>
  829.                             <xsl:apply-templates select="html:tbody/html:tr|html:tr"/>
  830.                         </tbody>
  831.                     </xsl:when>
  832.                     <xsl:otherwise>
  833.                         <tbody>
  834.                             <xsl:apply-templates select="html:tr|html:tbody/html:tr"/>
  835.                         </tbody>
  836.                     </xsl:otherwise>
  837.                 </xsl:choose>
  838.             </tgroup>
  839.         </informaltable>
  840.     </xsl:variable>
  841.     
  842.     <xsl:choose>
  843.         <xsl:when test="parent::html:td">        <!-- table in table, in docbook, table can't be directly child of an table entry -->
  844.             <para>
  845.                 <xsl:call-template name="generate_dummy_role_attribute" />                
  846.                 <xsl:copy-of select="$nodeContent" />
  847.             </para>
  848.         </xsl:when>
  849.         <xsl:otherwise>
  850.             <xsl:copy-of select="$nodeContent" />
  851.         </xsl:otherwise>
  852.     </xsl:choose>
  853. </xsl:template>
  854.  
  855. <xsl:template name="generateColspec">
  856.     <xsl:param name="count" select="0"/>
  857.     <xsl:param name="number" select="1"/>
  858.     <xsl:param name="colNodes" select="./html:col|./html:colgroup/html:col" />
  859.     <!--xsl:if test="$colNodes"-->
  860.         <xsl:choose>
  861.             <xsl:when test="$count < $number"/>
  862.             <xsl:otherwise>
  863.                 <xsl:variable name="currentColNode" select="$colNodes[$number]" />
  864.                 <colspec>
  865.                     <xsl:if test="$currentColNode/@class">
  866.                         <xsl:attribute name="char">        <!-- we use this attribute instead of "role" because there's no "role" for colspec! -->
  867.                             <xsl:value-of select="concat('RHC.',$currentColNode/@class,'\col')" />
  868.                         </xsl:attribute>
  869.                     </xsl:if>
  870.                     <xsl:attribute name="colnum">
  871.                         <xsl:value-of select="$number"/>
  872.                     </xsl:attribute>
  873.                     <xsl:attribute name="colname">
  874.                         <xsl:value-of select="concat('col',$number)"/>
  875.                     </xsl:attribute>
  876.                 </colspec>
  877.                 <xsl:call-template name="generateColspec">
  878.                     <xsl:with-param name="count" select="$count"/>
  879.                     <xsl:with-param name="number" select="$number + 1"/>
  880.                     <xsl:with-param name="colNodes" select="$colNodes" />
  881.                 </xsl:call-template>
  882.             </xsl:otherwise>
  883.         </xsl:choose>
  884.     <!--/xsl:if-->
  885. </xsl:template>
  886.  
  887. <xsl:template match="html:tr">
  888.     <row>
  889.         <xsl:apply-templates select="@*" />
  890.         <xsl:apply-templates/>
  891.     </row>
  892. </xsl:template>
  893.  
  894. <xsl:template match="html:th|html:td">
  895.     <xsl:variable name="position" select="count(preceding-sibling::*) + 1"/>
  896.     <entry>
  897.         <xsl:apply-templates select="@*" />
  898.         <xsl:if test="@colspan > 1">
  899.             <xsl:attribute name="namest">
  900.                 <xsl:value-of select="concat('col',$position)"/>
  901.             </xsl:attribute>
  902.             <xsl:attribute name="nameend">
  903.                 <xsl:value-of select="concat('col',$position + number(@colspan) - 1)"/>
  904.             </xsl:attribute>
  905.         </xsl:if>
  906.         <xsl:if test="@rowspan > 1">
  907.             <xsl:attribute name="morerows">
  908.                 <xsl:value-of select="number(@rowspan) - 1"/>
  909.             </xsl:attribute>
  910.         </xsl:if>
  911.         <xsl:apply-templates/>
  912.     </entry>
  913. </xsl:template>
  914.  
  915. <xsl:template name="countColumn">
  916.     <xsl:param name="table" select="."/>
  917.     <xsl:param name="row" select="$table/html:tr[1]|$table/html:tbody/html:tr[1]"/>
  918.     <xsl:param name="max" select="0"/>
  919.     <xsl:variable name="wlCurrentRow">
  920.         <xsl:call-template name="countRow">
  921.             <xsl:with-param name="cell" select="$row/html:td[1]"/>
  922.         </xsl:call-template>
  923.     </xsl:variable>
  924.  
  925.     <xsl:variable name="wlMax">
  926.         <xsl:choose>
  927.             <xsl:when test="$wlCurrentRow > $max">
  928.                 <xsl:value-of select="number($wlCurrentRow)"/>
  929.             </xsl:when>
  930.             <xsl:otherwise>
  931.                 <xsl:value-of select="number($max)"/>
  932.             </xsl:otherwise>
  933.         </xsl:choose>
  934.     </xsl:variable>
  935.  
  936.     <xsl:choose>
  937.         <xsl:when test="count($row/following-sibling::html:tr) = 0">
  938.             <xsl:value-of select="$wlMax"/>
  939.         </xsl:when>
  940.         <xsl:otherwise>
  941.             <xsl:call-template name="countColumn">
  942.                 <xsl:with-param name="table" select="$table"/>
  943.                 <xsl:with-param name="row" select="($row/following-sibling::html:tr)[1]"/>
  944.                 <xsl:with-param name="max" select="$wlMax"/>
  945.             </xsl:call-template>
  946.         </xsl:otherwise>
  947.     </xsl:choose>
  948. </xsl:template>
  949.  
  950. <xsl:template name="countRow">
  951.     <xsl:param name="cell"/>
  952.     <xsl:param name="count" select="0"/>
  953.     <xsl:variable name="wlCount">
  954.         <xsl:choose>
  955.             <xsl:when test="$cell/@colspan > 1">
  956.                 <xsl:value-of select="number($cell/@colspan) + number($count)"/>
  957.             </xsl:when>
  958.             <xsl:otherwise>
  959.                 <xsl:value-of select="number('1') + number($count)"/>
  960.             </xsl:otherwise>
  961.         </xsl:choose>
  962.     </xsl:variable>
  963.     <xsl:choose>
  964.         <xsl:when test="count($cell/following-sibling::*) > 0">
  965.             <xsl:call-template name="countRow">
  966.                 <xsl:with-param name="cell" select="$cell/following-sibling::*[1]"/>
  967.                 <xsl:with-param name="count" select="$wlCount"/>
  968.             </xsl:call-template>
  969.         </xsl:when>
  970.         <xsl:otherwise>
  971.             <xsl:value-of select="$wlCount"/>
  972.         </xsl:otherwise>
  973.     </xsl:choose>
  974. </xsl:template>
  975.  
  976.  
  977. <xsl:template name="process_script_node">
  978. <xsl:if test="$export.script = 1">
  979.     <programlisting>
  980.         <xsl:if test="@type">
  981.             <xsl:attribute name="role">
  982.                 <xsl:value-of select="@type"/>
  983.             </xsl:attribute>
  984.         </xsl:if>
  985.         <xsl:if test="@language">
  986.             <xsl:attribute name="lang">
  987.                 <xsl:value-of select="@language"/>
  988.             </xsl:attribute>
  989.         </xsl:if>
  990.         <xsl:if test="@src">
  991.             <xsl:attribute name="xreflabel">
  992.                 <xsl:value-of select="@src"/>
  993.             </xsl:attribute>
  994.         </xsl:if>
  995.         <xsl:apply-templates/>
  996.     </programlisting>
  997. </xsl:if>
  998. </xsl:template>
  999.  
  1000. <xsl:template match="html:script">
  1001.     <xsl:call-template name="process_script_node" />
  1002. </xsl:template>
  1003.  
  1004. <xsl:template match="html:head/html:script">
  1005. </xsl:template>
  1006.     
  1007. <xsl:template match="html:head/html:script" mode="head_script">
  1008.     <xsl:call-template name="process_script_node" />
  1009. </xsl:template>
  1010.  
  1011. <!-- object & style -->
  1012. <xsl:template match="html:object">
  1013.     <xsl:comment>[RH.HTML.OBJECT]
  1014.         <xsl:value-of select="RHHandlerDb:nodeToStr(.)" />
  1015.     </xsl:comment>
  1016. </xsl:template>
  1017.  
  1018. <xsl:template match="html:style">
  1019. <xsl:if test="$export.style = 1">
  1020.     <xsl:comment>[RH.HTML.RML_10]
  1021.         <xsl:value-of select="RHHandlerDb:nodeToStr(.)" />
  1022.     </xsl:comment>
  1023. </xsl:if>
  1024. </xsl:template>
  1025.  
  1026. <!-- @class -->
  1027. <xsl:template match="html:*/@class">
  1028.     <xsl:call-template name="generate_element_role">
  1029.         <xsl:with-param name="node" select="parent::*" />
  1030.     </xsl:call-template>
  1031. </xsl:template>
  1032.     
  1033. <xsl:template name="generate_element_role">
  1034.     <xsl:param name="node" select="." />
  1035.     <xsl:variable name="tagname" select="concat('\',name($node))" />
  1036.     <xsl:variable name="class">
  1037.         <xsl:if test="$export.style = 1">
  1038.             <xsl:if test="$node/@class">
  1039.                 <xsl:value-of select="$node/@class" />
  1040.             </xsl:if>
  1041.         </xsl:if>
  1042.     </xsl:variable>
  1043.     <xsl:if test="$export.style = 1">
  1044.         <xsl:attribute name="role">
  1045.             <xsl:value-of select="concat('RHC.',string($class),$tagname)" />
  1046.         </xsl:attribute>
  1047.     </xsl:if>
  1048. </xsl:template>
  1049.  
  1050. <xsl:template name="generate_dummy_role_attribute">
  1051.     <xsl:attribute name="role">
  1052.         <xsl:value-of select="$rhc.const.dummyflagstring" />
  1053.     </xsl:attribute>
  1054. </xsl:template>
  1055.  
  1056. <xsl:template name="generate_dummy_element">
  1057.     <xsl:param name="elementname" select="''" />
  1058.     
  1059.     <xsl:if test="$elementname != ''">
  1060.         <xsl:element name="{$elementname}">
  1061.             <xsl:call-template name="generate_dummy_role_attribute" />
  1062.         </xsl:element>
  1063.     </xsl:if>
  1064. </xsl:template>
  1065.  
  1066. <!-- @id -->
  1067. <xsl:template match="html:*/@id">
  1068.     <xsl:attribute name="id">
  1069.         <xsl:value-of select="normalize-space(.)" />
  1070.     </xsl:attribute>
  1071. </xsl:template>
  1072.  
  1073. <xsl:template match="html:address">
  1074.     <address>
  1075.         <xsl:call-template name="generate_element_role" />
  1076.         <xsl:apply-templates />
  1077.     </address>
  1078. </xsl:template>
  1079.  
  1080. <xsl:template match="html:center">
  1081.     <para>
  1082.         <xsl:apply-templates select="@*" />
  1083.         <xsl:call-template name="generate_element_role">
  1084.             <xsl:with-param name="node" select="." />
  1085.         </xsl:call-template>
  1086.         <xsl:apply-templates />    
  1087.     </para>
  1088. </xsl:template>
  1089.  
  1090. <xsl:template match="html:span[@class='__ROBOML_DISCARDED__']">
  1091.     <xsl:variable name="nodeContent">
  1092.         <replaceable>
  1093.             <xsl:apply-templates select="@*" />
  1094.             <xsl:call-template name="generate_element_role">
  1095.                 <xsl:with-param name="node" select="." />
  1096.             </xsl:call-template>
  1097.             <xsl:apply-templates />    
  1098.         </replaceable>
  1099.     </xsl:variable>
  1100.  
  1101.     <xsl:call-template name="simpara_pack_node">
  1102.         <xsl:with-param name="nodeContent" select="$nodeContent" />
  1103.     </xsl:call-template>
  1104. </xsl:template>
  1105.  
  1106. <xsl:template match="html:br|html:nobr|html:hr">
  1107.     <xsl:variable name="nodeContent">
  1108.         <markup>
  1109.             <xsl:apply-templates select="@*" />
  1110.             <xsl:call-template name="generate_element_role">
  1111.                 <xsl:with-param name="node" select="." />
  1112.             </xsl:call-template>
  1113.         </markup>
  1114.     </xsl:variable>
  1115.  
  1116.     <xsl:call-template name="simpara_pack_node">
  1117.         <xsl:with-param name="nodeContent" select="$nodeContent" />
  1118.     </xsl:call-template>
  1119. </xsl:template>
  1120.  
  1121. <xsl:template match="html:marquee">
  1122.     <blockquote>
  1123.         <xsl:call-template name="generate_dummy_role_attribute"/>
  1124.         <para>
  1125.             <xsl:call-template name="generate_element_role">
  1126.                 <xsl:with-param name="node" select="." />
  1127.             </xsl:call-template>
  1128.             <xsl:apply-templates />
  1129.         </para>
  1130.     </blockquote>
  1131. </xsl:template>
  1132.  
  1133. <xsl:template match="html:pre">
  1134.     <programlisting>
  1135.         <xsl:call-template name="generate_element_role">
  1136.             <xsl:with-param name="node" select="." />
  1137.         </xsl:call-template>
  1138.         <xsl:apply-templates />
  1139.     </programlisting>
  1140. </xsl:template>
  1141.  
  1142. <xsl:template match="comment()">
  1143. <xsl:if test="$export.comment = 1">
  1144.     <xsl:comment><xsl:value-of select="."/></xsl:comment>
  1145. </xsl:if>
  1146. </xsl:template>
  1147.  
  1148. <xsl:template match="*">
  1149.     <xsl:message>No template for <xsl:value-of select="name()"/></xsl:message>
  1150.     <xsl:apply-templates />
  1151. </xsl:template>
  1152.  
  1153. <xsl:template match="@*">
  1154.     <xsl:message>No template for <xsl:value-of select="name()"/></xsl:message>
  1155.     <xsl:apply-templates/>
  1156. </xsl:template>
  1157.  
  1158. <xsl:template match="text()">
  1159.     <xsl:variable name="nodeContent">
  1160.         <xsl:copy />
  1161.     </xsl:variable>
  1162.     
  1163.     <xsl:choose>
  1164.         <xsl:when test="(normalize-space(.) != '')">
  1165.             <xsl:call-template name="simpara_pack_node">
  1166.                 <xsl:with-param name="nodeContent" select="$nodeContent" />
  1167.             </xsl:call-template>
  1168.         </xsl:when>
  1169.         <xsl:when test=". != ''">
  1170.             <xsl:copy />
  1171.         </xsl:when>
  1172.         <xsl:otherwise></xsl:otherwise>
  1173.     </xsl:choose>
  1174. </xsl:template>
  1175.  
  1176. <xsl:template name="simpara_pack_node">
  1177.     <xsl:param name="nodeContent" select="." />
  1178.  
  1179.     <xsl:if test="$nodeContent">
  1180.         <xsl:choose>
  1181.             <xsl:when test="parent::html:body or parent::html:div or parent::html:li or parent::html:noscript">
  1182.                 <simpara>
  1183.                     <xsl:call-template name="generate_dummy_role_attribute"/>
  1184.                     <xsl:copy-of select="$nodeContent" />
  1185.                 </simpara>
  1186.             </xsl:when>
  1187.             <xsl:otherwise>
  1188.                 <xsl:copy-of select="$nodeContent" />
  1189.             </xsl:otherwise>
  1190.         </xsl:choose>
  1191.     </xsl:if>
  1192. </xsl:template>
  1193.  
  1194. </xsl:stylesheet>
  1195.